import sun.net.www.content.text.Generic;

public class GenericFanxing<T> {//泛型
    //泛型
//    Java泛型中的标记符含义：
//    E - Element (在集合中使用，因为集合中存放的是元素)
//    T - Type（Java 类）
//    K - Key（键）
//    V - Value（值）
//    N - Number（数值类型）
//    ？ -  表示不确定的java类型
//    S、U、V  - 2nd、3rd、4th types
//
//    Object跟这些标记符代表的java类型有啥区别呢？
//    Object是所有类的根类，任何类的对象都可以设置给该Object引用变量，使用的时候可能需要类型强制转换，但是用使用了泛型T、E等这些标识符后，在实际用之前类型就已经确定了，不需要再进行类型强制转换。

    private T object;

    public T getObject() {
        System.out.println(object.getClass().getName());
        return object;
    }

    public void setObject(T object) {
        this.object = object;
    }

    public static <E extends Number> void print(E print){
        System.out.println(print);
    }

    public static  void sth(GenericFanxing<? extends Number>print){//?代表泛型的通配符 只要是number的子类都可以，只有？代表不受限的泛型，后面有东西代表受限泛型
        System.out.println(print.getObject());
    }

    public static void main(String[] args) {
        GenericFanxing<Integer> generic = new GenericFanxing();
        generic.object = new Integer(25464644);
//        Integer i =  generic.getObject();
//        GenericFanxing<String> generic1 = new GenericFanxing();
//        generic1.object = "laowang";
//        String s = generic1.getObject();
//        System.out.println(i);
//        System.out.println(s);

        print(new Integer(123));
        sth(generic);//都是generic但是传不进去


    }
}
